#ifndef CBB_ENCODER_PROCESS_H
#define CBB_ENCODER_PROCESS_H

#include <stdio.h>
#include "../../../inc/cbb_enc_api.h"
#include "rk_type.h"
#include "rk_mpi.h"
#include "mpp_frame.h"
#include "mpp_common.h"

typedef struct {
    hd_u32_t channnel;  //编码器通道
    hd_u32_t width;	    //宽
	hd_u32_t height;    //高
	hd_u32_t format;    //数据格式
	hd_u32_t type;      //编码类型
    MppCtx ctx;         //编码器上下文
    MppApi *mpi;        //编码器接口
    MppBufferGroup buf_group;//缓存池
    MppBuffer frame_buffer; //图像数据缓存块
    MppBuffer packet_buffer;//码流数据缓存块
    MppFrame frame; //图像数据
    MppFrame packet;//码流数据
    hd_u32_t hor_stride; //水平
    hd_u32_t ver_stride; //垂直
    hd_u32_t frame_size; //一帧数据大小
    hd_s32_t frm_eos;//图像帧结束标志
    hd_s32_t pkt_eos;//码流结束标志
}CbbEncoderHandle_t;

//!public
EncoderHandle CbbEncoderInit(CbbEncoderConf_t enc_conf);

CbbCameraAckE_t CbbEncoderRun(EncoderHandle handle , const CbbCameraFrame_t raw_frame, CbbEncoderRes_t *enc_res);

CbbCameraAckE_t CbbEncoderCtrl(EncoderHandle handle,const CbbEncoderActionE_t action,CbbEncoderCtrlDev_t  *operate_p);

CbbCameraAckE_t CbbEncoderDestroy(EncoderHandle handle);

void CbbEncoderVersioin(CbbVersion_t *version_p);

//! private
CbbCameraAckE_t CbbSetEncoderConf(CbbEncoderHandle_t *encoder_handle, CbbEncoderConf_t enc_conf);
hd_s32_t EncoderGetFrameSize(CbbEncoderHandle_t *p_encoder_handle);
#endif